16844
22887
He estado jugando con JSON durante algún tiempo, solo lo lanzo como texto y no ha lastimado a nadie (que yo sepa), pero me gustaría comenzar a hacer las cosas correctamente.
He visto tantos "estándares" supuestos para el tipo de contenido JSON:
aplicación / json
aplicación / x-javascript
texto / javascript
texto / x-javascript
texto / x-json
Pero, ¿cuál es la correcta o la mejor? Tengo entendido que existen problemas de seguridad y compatibilidad con el navegador que varían entre ellos.
Sé que hay una pregunta similar, ¿Qué tipo de MIME si JSON está siendo devuelto por una API REST ?, pero me gustaría una respuesta un poco más específica. 
1
2
Siguiente
Para texto JSON:
aplicación / json
El tipo de medio MIME para texto JSON es application / json. La codificación predeterminada es UTF-8. (Fuente: RFC 4627).
Para JSONP (JavaScript ejecutable) con devolución de llamada:
aplicación / javascript
Aquí hay algunas publicaciones de blog que se mencionaron en los comentarios relevantes:
Por qué no debería usar texto / html para JSON
Internet Explorer a veces tiene problemas con la aplicación / json
Una lista bastante completa de Mimetypes y para qué usarlos
La lista oficial de tipos de mimo en IANA de la respuesta de @ gnrfan a continuación
|
IANA ha registrado el tipo MIME oficial para JSON como application / json.
Cuando se le preguntó por qué no text / json, Crockford parece haber dicho que JSON no es realmente JavaScript ni texto y también es más probable que IANA distribuya application / * que text / *.
Más recursos:
Tipos de medios
Solicitud de comentarios 4627
bluesmoon: JSON tiene un tipo
|
Para JSON:
Tipo de contenido: aplicación / json
Para JSON-P:
Tipo de contenido: aplicación / javascript
|
Por supuesto, el tipo de medio MIME correcto para JSON es application / json, pero es necesario darse cuenta de qué tipo de datos se espera en su aplicación.
Por ejemplo, utilizo Ext GWT y la respuesta del servidor debe ir como texto / html pero contiene datos JSON.
Lado del cliente, oyente de formulario Ext GWT
uploadForm.getForm (). addListener (nuevo FormListenerAdapter ()
{
@Anular
public void onActionFailed (formulario de formulario, int httpStatus, String responseText)
{
MessageBox.alert ("Error");
}
@Anular
public void onActionComplete (formulario de formulario, int httpStatus, String responseText)
{
MessageBox.alert ("Éxito");
}
});
En caso de usar el tipo de respuesta application / json, el navegador me sugiere que guarde el archivo.
Fragmento de código fuente del lado del servidor usando Spring MVC
devolver nuevo AbstractUrlBasedView ()
{
@SuppressWarnings ("sin marcar")
@Anular
protected void renderMergedOutputModel (modelo de mapa, solicitud HttpServletRequest,
HttpServletResponse respuesta) arroja una excepción
{
response.setContentType ("texto / html");
response.getWriter (). write (json);
}
};
|
JSON:
La respuesta son datos generados dinámicamente, de acuerdo con los parámetros de consulta pasados ​​en la URL.
Ejemplo:
{"Nombre": "Foo", "Id": 1234, "Clasificación": 7}
Tipo de contenido: aplicación / json
JSON-P:
JSON con relleno.
La respuesta son datos JSON, con una llamada de función envuelta.
Ejemplo:
functionCall ({"Nombre": "Foo", "Id": 1234, "Rango": 7});
Tipo de contenido: aplicación / javascript
|
Si usa Ubuntu o Debian y sirve archivos .json a través de Apache, es posible que desee entregar los archivos con el tipo de contenido correcto. Hago esto principalmente porque quiero usar la extensión JSONView de Firefox
El módulo de Apache mod_mime ayudará a hacer esto fácilmente. Sin embargo, con Ubuntu necesitas editar el archivo /etc/mime.types y agregar la línea
aplicación / json json
Luego reinicia Apache:
reinicio de apache2 del servicio sudo
|
Si llama a los servicios web ASP.NET desde el lado del cliente, debe usar application / json para que funcione. Creo que esto es lo mismo para los frameworks jQuery y Ext.
|
El tipo de contenido correcto para JSON es application / json A MENOS QUE esté utilizando JSONP, también conocido como JSON con relleno, que en realidad es JavaScript, por lo que el tipo de contenido correcto sería application / javascript.
|
No hay duda de que application / json es el mejor tipo MIME para una respuesta JSON.
Pero tenía algo de experiencia en la que tuve que usar application / x-javascript debido a algunos problemas de compresión. Mi entorno de alojamiento es alojamiento compartido con GoDaddy. No me permiten cambiar la configuración del servidor. Agregué el siguiente código a mi archivo web.config para comprimir respuestas.
















Al usar esto, las páginas .aspx se comprimieron con g-zip pero las respuestas JSON no. yo añadí

en las secciones de tipos estáticos y dinámicos. Pero esto no comprime las respuestas JSON en absoluto.
Después de eso, eliminé este tipo recién agregado y agregué

en las secciones de tipos estáticos y dinámicos, y cambió el tipo de respuesta en
.ashx (controlador asincrónico) para
aplicación / x-javascript
Y ahora descubrí que mis respuestas JSON estaban comprimidas con g-zip. Así que personalmente recomiendo usar
aplicación / x-javascript
solo si desea comprimir sus respuestas JSON en un entorno de alojamiento compartido. Porque en hosting compartido, no te permiten cambiar IISconfiguraciones.
|
Solo cuando uso application / json como tipo MIME, tengo lo siguiente (a partir de noviembre de 2011 con las versiones más recientes de Chrome, Firefox con Firebug):
No más advertencias de Chrome cuando el JSON se carga desde el servidor.
Firebug agregará una pestaña a la respuesta que le mostrará los datos JSON
formateado. Si el tipo MIME es diferente, simplemente se mostrará como
'Contenido de respuesta'.
|
No todo funciona para el tipo de contenido application / json.
Si está utilizando el envío de formulario Ext JS para cargar un archivo, tenga en cuenta que el navegador analiza la respuesta del servidor para crear el documento para el